GtkThemingEngine: Animate checkboxes activation.
authorCarlos Garnacho <carlosg@gnome.org>
Thu, 19 Aug 2010 20:47:02 +0000 (22:47 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Sat, 4 Dec 2010 14:38:09 +0000 (15:38 +0100)
gtk/gtkthemingengine.c

index 8797ff898ef86e3acc67e5a42bf4ba0172c0de2d..cbf57bd1d5e5af4b57d26e9a56f16caf09f5945a 100644 (file)
@@ -570,33 +570,44 @@ gtk_theming_engine_render_check (GtkThemingEngine *engine,
                       line_thickness);
       cairo_fill (cr);
     }
-  else if (gtk_theming_engine_is_state_set (engine, GTK_STATE_ACTIVE, NULL))
+  else
     {
-      cairo_translate (cr,
-                      x + pad, y + pad);
-
-      cairo_scale (cr, interior_size / 7., interior_size / 7.);
-
-      cairo_move_to  (cr, 7.0, 0.0);
-      cairo_line_to  (cr, 7.5, 1.0);
-      cairo_curve_to (cr, 5.3, 2.0,
-                     4.3, 4.0,
-                     3.5, 7.0);
-      cairo_curve_to (cr, 3.0, 5.7,
-                     1.3, 4.7,
-                     0.0, 4.7);
-      cairo_line_to  (cr, 0.2, 3.5);
-      cairo_curve_to (cr, 1.1, 3.5,
-                     2.3, 4.3,
-                     3.0, 5.0);
-      cairo_curve_to (cr, 1.0, 3.9,
-                     2.4, 4.1,
-                     3.2, 4.9);
-      cairo_curve_to (cr, 3.5, 3.1,
-                     5.2, 2.0,
-                     7.0, 0.0);
+      gdouble progress;
+      gboolean active;
 
-      cairo_fill (cr);
+      active = gtk_theming_engine_is_state_set (engine, GTK_STATE_ACTIVE, &progress);
+
+      if (active || progress > 0)
+        {
+          cairo_translate (cr,
+                           x + pad, y + pad);
+
+          cairo_scale (cr, interior_size / 7., interior_size / 7.);
+
+          cairo_rectangle (cr, 0, 0, 7 * progress, 7);
+          cairo_clip (cr);
+
+          cairo_move_to  (cr, 7.0, 0.0);
+          cairo_line_to  (cr, 7.5, 1.0);
+          cairo_curve_to (cr, 5.3, 2.0,
+                          4.3, 4.0,
+                          3.5, 7.0);
+          cairo_curve_to (cr, 3.0, 5.7,
+                          1.3, 4.7,
+                          0.0, 4.7);
+          cairo_line_to  (cr, 0.2, 3.5);
+          cairo_curve_to (cr, 1.1, 3.5,
+                          2.3, 4.3,
+                          3.0, 5.0);
+          cairo_curve_to (cr, 1.0, 3.9,
+                          2.4, 4.1,
+                          3.2, 4.9);
+          cairo_curve_to (cr, 3.5, 3.1,
+                          5.2, 2.0,
+                          7.0, 0.0);
+
+          cairo_fill (cr);
+        }
     }
 
   cairo_restore (cr);